package io.bhex.baselib.utils.devices;

import android.os.Build;

import java.io.IOException;
import java.lang.reflect.Method;

/**
 * ================================================
 * 作   者：ppzhao
 * 创建时间：2019-12-25
 * 邮   箱：
 * 描   述：
 * ================================================
 *
 * 在开发中 我们有时候会需要获取当前手机的系统版本来进行判断，或者需要获取一些当前手机的硬件信息。
 *
 * android.os.Build类中。包括了这样的一些信息。我们可以直接调用 而不需要添加任何的权限和方法。
 *
 * android.os.Build.BOARD：获取设备基板名称
 * android.os.Build.BOOTLOADER:获取设备引导程序版本号
 * android.os.Build.BRAND：获取设备品牌
 *
 * android.os.Build.CPU_ABI：获取设备指令集名称（CPU的类型）
 *
 * android.os.Build.CPU_ABI2：获取第二个指令集名称
 *
 * android.os.Build.DEVICE：获取设备驱动名称
 * android.os.Build.DISPLAY：获取设备显示的版本包（在系统设置中显示为版本号）和ID一样
 * android.os.Build.FINGERPRINT：设备的唯一标识。由设备的多个信息拼接合成。
 *
 * android.os.Build.HARDWARE：设备硬件名称,一般和基板名称一样（BOARD）
 *
 * android.os.Build.HOST：设备主机地址
 * android.os.Build.ID:设备版本号。
 *
 * android.os.Build.MODEL ：获取手机的型号 设备名称。
 *
 * android.os.Build.MANUFACTURER:获取设备制造商
 *
 * android:os.Build.PRODUCT：整个产品的名称
 *
 * android:os.Build.RADIO：无线电固件版本号，通常是不可用的 显示unknown
 * android.os.Build.TAGS：设备标签。如release-keys 或测试的 test-keys
 *
 * android.os.Build.TIME：时间
 *
 * android.os.Build.TYPE:设备版本类型 主要为”user” 或”eng”.
 *
 * android.os.Build.USER:设备用户名 基本上都为android-build
 *
 * android.os.Build.VERSION.RELEASE：获取系统版本字符串。如4.1.2 或2.2 或2.3等
 *
 * android.os.Build.VERSION.CODENAME：设备当前的系统开发代号，一般使用REL代替
 * android.os.Build.VERSION.INCREMENTAL：系统源代码控制值，一个数字或者git hash值
 *
 * android.os.Build.VERSION.SDK：系统的API级别 一般使用下面大的SDK_INT 来查看
 *
 * android.os.Build.VERSION.SDK_INT：系统的API级别 数字表示
 *
 * android.os.Build.VERSION_CODES类 中有所有的已公布的Android版本号。全部是Int常亮。可用于与SDK_INT进行比较来判断当前的系统版本
 * ————————————————
 *
 * //BOARD 主板
 * String phoneInfo = "BOARD: " + android.os.Build.BOARD;
 * phoneInfo += ", BOOTLOADER: " + android.os.Build.BOOTLOADER;
 * //BRAND 运营商
 * phoneInfo += ", BRAND: " + android.os.Build.BRAND;
 * phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI;
 * phoneInfo += ", CPU_ABI2: " + android.os.Build.CPU_ABI2;
 *
 * //DEVICE 驱动
 * phoneInfo += ", DEVICE: " + android.os.Build.DEVICE;
 * //DISPLAY Rom的名字 例如 Flyme 1.1.2（魅族rom） &nbsp;JWR66V（Android nexus系列原生4.3rom）
 * phoneInfo += ", DISPLAY: " + android.os.Build.DISPLAY;
 * //指纹
 * phoneInfo += ", FINGERPRINT: " + android.os.Build.FINGERPRINT;
 * //HARDWARE 硬件
 * phoneInfo += ", HARDWARE: " + android.os.Build.HARDWARE;
 * phoneInfo += ", HOST: " + android.os.Build.HOST;
 * phoneInfo += ", ID: " + android.os.Build.ID;
 * //MANUFACTURER 生产厂家
 * phoneInfo += ", MANUFACTURER: " + android.os.Build.MANUFACTURER;
 * //MODEL 机型
 * phoneInfo += ", MODEL: " + android.os.Build.MODEL;
 * phoneInfo += ", PRODUCT: " + android.os.Build.PRODUCT;
 * phoneInfo += ", RADIO: " + android.os.Build.RADIO;
 * phoneInfo += ", RADITAGSO: " + android.os.Build.TAGS;
 * phoneInfo += ", TIME: " + android.os.Build.TIME;
 * phoneInfo += ", TYPE: " + android.os.Build.TYPE;
 * phoneInfo += ", USER: " + android.os.Build.USER;
 * //VERSION.RELEASE 固件版本
 * phoneInfo += ", VERSION.RELEASE: " + android.os.Build.VERSION.RELEASE;
 * phoneInfo += ", VERSION.CODENAME: " + android.os.Build.VERSION.CODENAME;
 * //VERSION.INCREMENTAL 基带版本
 * phoneInfo += ", VERSION.INCREMENTAL: " + android.os.Build.VERSION.INCREMENTAL;
 * //VERSION.SDK SDK版本
 * phoneInfo += ", VERSION.SDK: " + android.os.Build.VERSION.SDK;
 * phoneInfo += ", VERSION.SDK_INT: " + Android.os.Build.VERSION.SDK_INT;
 * ————————————————

 * 原文链接：https://blog.csdn.net/xx326664162/article/details/52438706
 *
 * 在开发过程中，可能需要判断系统的ROM信息，检测ROM类型是MIUI、EMUI、还是Flyme。但是又不能只根据手机的生产厂家（android.os.Build.MANUFACTURER）来判断，因为要考虑到刷机的用户。比如说华为手机刷了MIUI系统。
 */

public class RomUtils {

    private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";
    private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";
    private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";

    /**
     * 检测小米MIUI
     * @return
     */
    public static boolean isMIUI() {
        try {
            //BuildProperties 是一个工具类，下面会给出代码
            final BuildProperties prop = BuildProperties.newInstance();
            return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null
                    || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null
                    || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;
        } catch (final IOException e) {
            return false;
        }
    }

    private static final String KEY_EMUI_VERSION_CODE = "ro.build.hw_emui_api_level";

    /**
     * 检测华为EMUI
     * @return
     */
    public static boolean isEMUI() {
        try {
            //BuildProperties 是一个工具类，下面会给出代码
            final BuildProperties prop = BuildProperties.newInstance();
            return prop.getProperty(KEY_EMUI_VERSION_CODE, null) != null;
        } catch (final IOException e) {
            return false;
        }
    }

    /**
     * 检测Flyme
     * @return
     */
    public static boolean isFlyme() {
        try {
            // Invoke Build.hasSmartBar()
            final Method method = Build.class.getMethod("hasSmartBar");
            return method != null;
        } catch (final Exception e) {
            return false;
        }
    }


}
